/**
 * 操作t_emp表
 */

// 引入数据源
let pool = require('../../datasource.js');
let util = require("../../util.js");


/**
 * 查询列表
 * @param {Object} data 传入参数
 * @param {Function} callback 回调函数
 */
module.exports.queryList = function (data, callback) {

    util.setupPage(data,'hire_date desc');

    let sql = `SELECT
	t_emp_pk,
	emp_name,
	job,
	mgr,
	hire_date,
	sal,
	comm,
	t_dept_fk,
	d.dept_name,
	d.loc 
FROM
	t_emp e,
	t_dept d
WHERE e.t_dept_fk = d.t_dept_pk`;

let params = [];
// 如果传入职员名称，那么加上职员名称
// 使用?作为占位符，构建预处理SQL语句，可以防止SQL注入攻击
if (data.emp_name) {
    // 开发中，严禁使用拼接字符串的方式组装SQL语句，因为有SQL注入风险
    // sql += ` AND e.emp_name LIKE '%${data.emp_name}%' `;
    sql += ` AND e.emp_name LIKE CONCAT('%',?,'%') `;
    params.push(data.emp_name);
}
if (data.dept_name) {
    sql += ` AND d.dept_name LIKE CONCAT('%',?,'%') `;
    params.push(data.dept_name);
}
if (data.loc) {
    sql += ` AND d.loc LIKE CONCAT('%',?,'%') `;
    params.push(data.loc);
}
if (data.hire_date_begin) {
    sql += ` AND e.hire_date >= ? `;
    params.push(data.hire_date_begin);
}
if (data.hire_date_end) {
    sql += ` AND e.hire_date <= ? `;
    params.push(data.hire_date_end + " 23:59:59.999");
}

// 打开了分页
if (data.paging) {
    sql += ` order by ${data.order} LIMIT ?,? `;
    params.push(data.begin);
    params.push(data.rows);
}

console.log("sql = ",sql);
console.log("params = ",params);

    // 执行SQL步骤：1、获取连接
    pool.getConnection((err, connection) => {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            callback(null);
            return;
        }

        // 2、使用连接执行SQL
        // result：查询结果集（可以理解成一个数组）
        connection.query(sql,params, function (err, result) {
            if (err) {
                console.log("查询出错：", err);
                callback(null);
                return;
            }

            // 3、释放连接
            connection.release();

            callback(result);

        });
    })
}

/**
 * 增加数据
 * @param {Object} data 传入参数
 * @param {Function} callback 回调函数
 */
module.exports.insert = function (data, callback) {
    
    let sql = `INSERT INTO t_emp (emp_name,job,mgr,hire_date,sal,comm,t_dept_fk) VALUES (?,?,?,?,?,?,?);`
    let params = [data.emp_name,data.job,data.mgr,data.hire_date,data.sal,data.comm,data.t_dept_fk];

    console.log("sql = ",sql);
    console.log("params = ",params);

    // 执行SQL步骤：1、获取连接
    pool.getConnection((err, connection) => {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            callback(null);
            return;
        }

        // 2、使用连接执行SQL
        // result：执行SQL结果，如果执行的是增、删、改操作，返回的是结果对象
        // 对象中的重要属性:
        //  affectedRows：受影响行数
        //  insertId：如果有自增长主键，返回新增加数据的主键。
        connection.query(sql,params, function (err, result) {
            if (err) {
                console.log("增加出错：", err);
                callback(null);
                return;
            }

            // 3、释放连接
            connection.release();
            // 判断影响行数
            callback(result);
        });
    })
}

/**
 * 修改数据
 * @param {Object} data 传入参数
 * @param {Function} callback 回调函数
 */
 module.exports.update = function (data, callback) {
    
    let sql = `UPDATE t_emp SET `;
    let params = [];
    if (data.emp_name) {
        sql += ' emp_name = ?,';
        params.push(data.emp_name)
    }
    if (data.job) {
        sql += ' job = ?,';
        params.push(data.job)
    }
    if (data.mgr) {
        sql += ' mgr = ?,';
        params.push(data.mgr)
    }
    if (data.hire_date) {
        sql += ' hire_date = ?,';
        params.push(data.hire_date)
    }
    if (data.sal) {
        sql += ' sal = ?,';
        params.push(data.sal)
    }
    if (data.comm) {
        sql += ' comm = ?,';
        params.push(data.comm)
    }
    if (data.t_dept_fk) {
        sql += ' t_dept_fk = ?,';
        params.push(data.t_dept_fk)
    }
    sql = sql.substring(0,sql.length - 1);
    sql += ' WHERE t_emp_pk = ?;';
    params.push(data.t_emp_pk);

    console.log("sql = ",sql);
    console.log("params = ",params);

    // 执行SQL步骤：1、获取连接
    pool.getConnection((err, connection) => {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            callback(null);
            return;
        }

        // 2、使用连接执行SQL
        connection.query(sql,params, function (err, result) {
            if (err) {
                console.log("修改出错：", err);
                callback(null);
                return;
            }

            // 3、释放连接
            connection.release();
            // 判断影响行数
            callback(result);
        });
    })
}

/**
 * 删除数据
 * @param {Object} data 传入参数
 * @param {Function} callback 回调函数
 */
 module.exports.delete = function (data, callback) {
    
    let sql = `DELETE FROM t_emp 
    WHERE t_emp_pk = ?;`
    let params = [data.t_emp_pk];

    console.log("sql = ",sql);
    console.log("params = ",params);

    // 执行SQL步骤：1、获取连接
    pool.getConnection((err, connection) => {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            callback(null);
            return;
        }

        // 2、使用连接执行SQL
        connection.query(sql,params, function (err, result) {
            if (err) {
                console.log("修改出错：", err);
                callback(null);
                return;
            }

            // 3、释放连接
            connection.release();
            // 判断影响行数
            callback(result);
        });
    })
}
